\documentclass[dvips, a4paper, 10pt]{article}

% Laden van packages
\usepackage{makeidx}
\usepackage{parskip}
\usepackage[table]{xcolor}
\usepackage{fancyvrb}
\usepackage{graphicx}
\usepackage[dutch]{babel}
\usepackage{wrapfig}
\usepackage{fancyheadings}
\usepackage{url}
\usepackage{makeidx}

% Opmaak
\setlength{\parindent}{0cm}
\setlength{\parskip}{0.50cm}
\setlength{\oddsidemargin}{0.5cm}
\setlength{\evensidemargin}{0.5cm}
\setlength{\textwidth}{15cm}
\setlength{\topmargin}{-1cm}
\setlength{\textheight}{22.5cm}

% Andere instellingen (footer, row colors,...)
\makeindex
\pagestyle{fancyplain}
\fancyhf{} % sets both header and footer to nothing
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0.1pt}
\lfoot{Robin Daniels}
\cfoot{Unix-Linux Eindwerk}
\rfoot{Pagina \thepage}
\definecolor{row1}{gray}{0.90}
\definecolor{row2}{gray}{0.95}
\DefineVerbatimEnvironment{code}{Verbatim}{fontsize=\small}

% Titel opmaken
\title{Eindwerk Unix-Linux: leren werken met \LaTeX{}}
\author{Robin Daniels}
\date{Mei 2012}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Begin van het document
\begin{document}

% Titelpagina aanmaken
\maketitle

% Inhoudsopgave aanmaken
\newpage
\tableofcontents

% Pagina met een lijst van de figuren en tabellen
\newpage
\listoffigures
\listoftables

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Deel ivm LyX
\newpage
\section{Bespreken van een Linux applicatie}
In dit hoofdstuk bespreek ik de Linux applicatie LyX \index{LyX}. Ik leg uit wat LyX juist is en waarvoor het gebruikt kan worden. Ook de geschiedenis, voor- en nadelen, functionaliteiten en portable versies van deze applicatie komen aan bod.

\begin{figure}[!h]
  \centering
  \includegraphics[scale=0.65]{LyxIcon}
  \caption{Het logo} 
\end{figure}

\subsection{Wat is LyX?}
LyX \cite{lyxhomepage} is een geavanceerde open source documentverwerker en draait op Linux / Unix, Windows en Mac OS X. Het wordt een documentverwerker \index{Documentverwerker} genoemd omdat, in tegenstelling tot de standaard tekstverwerkers, LyX aanmoedigt om teksten te schrijven gebaseerd op structuur en niet op het uiterlijk. Met LyX kunt u zich concentreren op het schrijven waardoor de details van de opmaak overgelaten wordt aan de software. LyX automatiseert de opmaak volgens vooraf bepaalde regels waardoor consistentie in zelfs de meest complexe documenten gegarandeerd wordt. LyX produceert hoogwaardige, professionele uitvoer met behulp van LaTeX. 

\begin{wrapfigure}{r}{0.40\textwidth}
  \centering
  \includegraphics[scale=0.62]{LyxBird}
  \caption{Een alternatief logo} 
\end{wrapfigure}
Met LyX is korte aantekeningen maken of brieven schrijven een koud kunstje. Maar ook het samenstellen van complexe documenten zoals technische documentatie of wiskundige formules is geen probleem.

LyX biedt uitgebreide controle over marges, kop- en voetteksten, tabs, opsommingen, geavanceerde tabellen en nog veel meer. Het pakket bevat een groot aantal standaard sjablonen voor bijvoorbeeld brieven, artikelen, boeken en zelfs filmscripts.

LyX presenteert de gebruiker met het vertrouwde gezicht van een WYSIWYG-tekstverwerker \index{WYSIWYG}. Echter, gebruikers die vertrouwd zijn met Microsoft Word of WordPerfect kunnen vreemd opkijken door het gedrag van LyX. Bijvoorbeeld, meerdere malen drukken op de spatiebalk heeft geen effect. Zie tabel \ref{TabelVergelijken} op pagina \pageref{TabelVergelijken} voor een vergelijking van LyX met Microsoft Word.

LyX moet u vergelijken als de eerste WYSIWYM \index{WYSIWYM} tekstverwerker of voluit, What You See Is What You Mean. Alle opmaak intelligentie van LaTeX wordt gepresenteerd aan de gebruiker door middel van visuele controles. Kortom, met LyX krijgt u geen eindbeeld hoe het document eruit gaat zien maar het geeft u een idee hoe de opmaak in elkaar zit. Het vereenvoudigt zaken waar u in traditionele tekstverwerkers hoofdpijn aan overhoudt.

\subsection{Geschiedenis}
Matthias Ettrich \cite{lyxwikipedia} begon met het ontwikkelen van een shareware \index{Shareware} programma genoemd Lyrix in 1995. Het werd bekent gemaakt op USENET \index{USENET} waar het veel aandacht kreeg gedurende de jaren. Kort na de release werd Lyrix hernoemd naar LyX wegens een name-clash met een tekstverwerker van Santa Cruz Operation.

LyX werd gepubliceerd onder de GNU General Public License wat het project beschikbaar maakte voor de open-source community. De naam Lyx komt van de extensie '.lyx' die gebruikt wordt voor de Lyrix-bestanden.

\subsection{Functionaliteiten}
LyX beschikt over allerlei nuttige functionaliteiten, de voornaamste zijn:
\begin{itemize}
  \item Gebruikersinterface met menu's;
  \item Automatische nummering, titels en paragrafen met inhoudsopgave;
  \item Tekst wordt uitgelijnd volgens standaard regels, inclusief spatieafstanden en afbrekingen;
  \item Notities;
  \item BibTeX ondersteuning;
  \item Tabel-editor (WYSIWYG);
  \item Formule-editor (WYSISWYG);
  \item Mogelijkheid voor het importeren van bekende tekstbestanden;
  \item Mogelijkheid om te exporteren naar DocBook, SGML, XHTML en plain-text;
  \item SVN ondersteuning voor groepswerk;
  \item \ldots
\end{itemize}

\newpage
\subsection{LyX versus Microsoft Word}
In de volgende tabel vindt u de vergelijking terug van LyX en Microsoft Word \cite{lyxwiki}.

% Tabel van de vergelijking
\begin{table}[h]
\rowcolors{1}{row1}{row2}
\renewcommand{\arraystretch}{1.4}
\begin{tabular}{ p{3.66cm} | p{5cm} p{5cm} }
& \textbf{LyX} & \textbf{MS Word} \\
\hline
\textbf{Installatie} & Eenvoudig en snel & Eenvoudig \\
\textbf{Look and Feel} & Eerder simplistisch & Geavanceerd \\
\textbf{Manier van werken} & Opmaak heeft geen belang & Eindeloze lus van een stukje schrijven, opmaak aanpassen, stukje schrijven,\ldots \\
\textbf{Resultaat} & Afgehandeld door LaTeX, mooi afgewerkt & Opmaak afhankelijk van de eindgebruiker \\
\textbf{Wiskunde} & Heel eenvoudig door behulp van enkele commando's & Zeer tijdrovend \\
\textbf{Inhoudsopgave, citaten, bibliografie} & Snel te implementeren & Wordt snel ingewikkeld \\
\textbf{Stabiliteit} & Zelden crashes met een kleine kans op verlies van data & Crashes met mogelijk verlies van data \\
\end{tabular}
\caption{Vergelijking van LyX en Microsoft Word}
\label{TabelVergelijken}
\end{table}

\subsection{Voor- en nadelen}
Hieronder volgt een opsomming van enkele voor- en nadelen in verband met het werken met LyX en de uitwisselbaarheid van de geproduceerde bestanden.

% Opsomming voordelen
\textbf{Voordelen}
\begin{itemize}
  \item Geen afleiding van de code zodat alle concentratie naar het schrijven kan gaan;
  \item De \textit{math mode} staat toe formules interactief toe te voegen;
  \item Mogelijkheid om waar dan ook willekeurige \LaTeX{}-code in te voeren;
  \item Inhoudsopgave waarmee u eenvoudig doorheen het document navigeert.
\end{itemize}

% Opsomming nadelen
\textbf{Nadelen}
\begin{itemize}
  \item Enkel de LyX-editor kan .lyx-files openen;
  \item LyX beschikt niet over een optie waarmee u de \LaTeX{}-code kan bewerken om zo eventuele bugs weg te werken.
\end{itemize}

\subsection{Portable-versies}
De bedoeling van een portable \index{Portable} programma is dat het bruikbaar is zonder het eerst te moeten installeren. Ook LyX biedt hier een oplossing voor. Omdat LyX enkel een editor is moet u ook over een portable \LaTeX{} library beschikken. Met een aantal aanpassingen aan de werkomgeving maakt u uw besturingssysteem klaar voor het gebruik van de portable versie. Hieronder vindt u een tabel van een aantal beschikbare softwarepakketten.

% Tabel softwarepakketten
\begin{table}[h]
\renewcommand{\arraystretch}{1.4}
\rowcolors{1}{row1}{row2}
\begin{tabular}{ p{3cm} | p{5cm} p{2.5cm} p{2.5cm} }
& \textbf{Library} & \textbf{LyX} & \textbf{Grootte} \tabularnewline
\hline
\textbf{Standaard} & MiKTeX Portable 2.9 & LyX 2.0.3 & 240 MB \tabularnewline
\textbf{LyTeX} & TeX Works, TeX Live & LyX 1.6.3 & 450 MB \tabularnewline
\textbf{Portable LyX} & LyTeX & LyX 2.0 & 750 MB \tabularnewline
\textbf{USBTeX} & MikTeX 2.9, TeXMaker 3.2.1, SumatraPDF 1.9 & LyX 1.6.2 & 525 MB \tabularnewline
\end{tabular}
\caption{Overzicht van de beschikbare softwarepakketten}
\end{table}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Deel ivm VCS
\newpage
\section{Versiebeheersysteem}
Er bestaan verschillende versiebeheersystemen \index{Versiebeheersystemen} voor Linux en om het schrijven van de \LaTeX{}-tekst te vergemakkelijken installeren we er ook best een. Niet alleen kan u op deze manier uw werk delen met andere maar u heeft ook de mogelijkheid wijzigingen terug te draaien naar een vorige versie. Vooraleer ik aan de slag ging met een versiebeheersysteem moest ik een aantal keuzes maken. Kies ik voor Git, Subversion, Mercurial of nog iets anders? Host ik zelf een server waarop de gegevens centraal komen te staan of zoek ik een alternatief? Welke programma's heb ik nodig om dit allemaal te verwezenlijken? In de volgende subsecties bespreek ik mijn antwoorden op deze vragen.

\subsection{Subversion}
Zoals de titel het al weggeeft heb ik gekozen om met Subversion of SVN te werken \cite{svn} \index{Subversion} \index{SVN}. Het grote verschil tussen Subversion en Git (of Mercurial) is dat Subversion gecentraliseerd ingesteld is terwijl Git gedistribueerd werkt. \index{Git} Dit houdt in dat Subversion ideaal is om een groepswerk te maken waar enkel de groepsleden toegang tot moeten hebben. Git daarentegen kan gebruikt worden om een project naar de buitenwereld te kunnen brengen, als het waren gedistribueerd worden.

Om het Subversion systeem te installeren heb ik \textit{Advanced version control system} gedownload en ge\"installeerd van het Ubuntu Software Center. Hierdoor kan u programma's zoals \textit{svn, svnadmin, svnlook, \ldots} uitvoeren vanaf de terminal. Deze programma's staan toe gegevens naar de centrale plaats te uploaden of data ervan te downloaden. Ik heb tot nu toe enkel het programma \textit{svn} nodig gehad.

\subsection{Google Code}
Omdat het hosten van een eigen server zou betekenen dat ik een computer met permanente internet connectie continue moest laten opstaan ben ik opzoek gegaan naar een alternatief. Ik ben uitgekomen bij Google Code \cite{googlecode}, \index{Google Code} hiermee was ik al bekent en heb er uitsluitend goede ervaringen mee. Google Code is een Project Hosting service \index{Hosting service} aangeboden door Google. Deze service is gratis voor open source projecten. Elk project heeft zijn eigen gebruikersbeheer, Subversion/Mercurial/Git repository, een issue tracker, wiki pagina's en een download sectie. Deze oplossing is eenvoudig te gebruiken, snel, betrouwbaar en kan op grote schaal gebruikt worden.

Het project opstellen was in enkele momenten gebeurd. Met een aantal instellingen aan te passen, zoals het kiezen voor Subversion, was het project aangemaakt en klaar voor gebruikt. Door de combinatie van Google Code met de SVN-plugin \index{SVN-plugin} die ik al ge\"installeerd heb is mijn versiebeheersysteem klaar voor gebruik. Op figuur \ref{GoCo} wordt de interface van Google Code weergegeven.

\newpage
\subsection{Het versiebeheersysteem in actie}
Vooraleer ik een \textit{commit} kan doen moet ik eenmalig de \textit{checkout} instellen. In de terminal geef ik het volgende commando in.

\textit{svn checkout https://eindwerklinux.googlecode.com/svn/trunk/ eindwerklinux \\ --username robindaniels405@gmail.com}

Daarna navigeer ik naar de \textit{working directory}, \index{Working directory} dit is de map waarin de projectbestanden staan. In mijn geval staan deze in home/robin/eindwerklinux. Om de veranderingen door te voeren gebruik ik het commando:

\textit{svn commit . -m "Een nuttige boodschap"}

Door een '.' te plaatsten worden alle bestanden die aangepast zijn doorgevoerd. De parameter '-m' laat mij toe een verklarende boodschap toe te voegen. Verder moet ik rekening houden dat een bestand toevoegen of verwijderen in de directory niet voldoende is. SVN weet namelijk nog niet dat dit bestand deel uitmaakt van het geheel. Met de commando's \textit{svn add bestandnaam.tex} en \textit{svn delete eindwerk.tex} voeg ik bestanden toe of verwijderen ik ze.

Wanneer ik met meerdere mensen aan dit project zou werken moet ik het commando \textit{svn update .} gebruiken om de data van de centrale plaats te kunnen binnenhalen. Mocht ik aanpassingen hebben gemaakt die niet mogen doorgevoerd worden, dan kan ik deze ongedaan maken met het \textit{svn revert .} commando. Er zijn natuurlijk nog veel meer commando's maar deze zijn de voornaamste die ik gebruikt heb.

% Figuur van Google Code
\begin{figure}[!h]
  \centering
  \includegraphics[scale=0.60]{GoogleCode}
  \caption{Overzicht van de versies in Google Code} 
  \label{GoCo}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Deel ivm Mail
\newpage
\section{Configureren van een Mail-server}
Om met Ubuntu een mail te versturen via het commando mutt \cite{mutttut} \index{Mutt} moeten deze package eerst ge\"installeerd worden. Dit doe ik door in de Terminal het commando \textit{sudo apt-get install mutt} in te geven. Na het ingeven van mijn wachtwoord gaat de installatie van start.

De volgende stap is het aanmaken van een .muttrc file in de home folder. Hierin bewaar ik mijn gegevens die mutt nodig heeft om een mail te versturen. Ik moet hier wel opmerken dat mutt niet zelf mails verstuurd. Hiervoor doet mutt beroep op een lokaal MTA programma (Mail Transfer Agent).\index{MTA} \index{Mail Transfer Agent} In mijn geval is dit sendmail. Hieronder vindt u de inhoud van het .muttrc \index{.muttrc} bestand terug.

\begin{code}
set from = "robindaniels405@gmail.com"
set realname = "Robin Daniels"
set imap_user = "robindaniels405@gmail.com"
set imap_pass = "wachtwoord"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed = "+[Gmail]/Drafts"
set header_cache = ~/.mutt/cache/headers
set message_cachedir = ~/.mutt/cache/bodies 
set certificate_file = ~/.mutt/certificates
set smtp_url = "smtp://robindaniels405@smtp.gmail.com:587/"
set smtp_pass = "wachtwoord"
set move = no
set imap_keepalive = 900
\end{code}

De cache en mutt map moeten nog aangemaakt worden, dit doe ik door in de Terminal \textit{mkdir .mutt} en \textit{mkdir .mutt/cache} in te geven. Omdat ik in het .muttrc bestand mijn wachtwoord heb geplaatst zorg ik dat enkel ik dit bestand kan openen. In de Terminal geef ik hiervoor \textit{chmod 700 .muttrc} in.

Nu is alles geconfigureerd en klaar voor gebruik. De body tekst bepalen doe ik als volgt \textit{echo "Tekst in de body"}, vervolgens hang ik hier het mutt commando aan met de nodige parameters \textit{| mutt -s "Onderwerp" -a "Bijlage.pdf" -- robindaniels405@gmail.com}. In sectie \ref{bashscript} wordt een voorbeeld gegeven hoe het mutt commando in een bash script gebruikt kan worden.

% Figuur van de ontvangen mail
\begin{figure}[!h]
  \centering
  \includegraphics[scale=0.56]{MailResult}
  \caption{Ontvangen mail, verzonden via het mutt commando} 
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Deel ivm script
\newpage
\section{Bash-script}
\label{bashscript}
In dit hoofdstuk overloop ik theoretisch mijn script. Ik begin met het stappenplan van executie.

% Opsomming van het stappenplan
\begin{itemize}
  \item Bij het opstarten worden er gegevens ingelezen;
  \item De nodige gegevens worden in de \LaTeX{}-code aangepast;
  \item Het .tex bestand wordt geconverteerd naar een .pdf bestand;
  \item De naam wordt verandert naar de voornaam + achternaam zonder spaties;
  \item Het bestand wordt doorgestuurd naar het opgegeven e-mail adres.
\end{itemize}

Op de volgende pagina vindt u de volledige broncode terug. Ik leg hier alvast uit hoe de code in zijn werk gaat. Als eerste worden de vier variabelen ingelezen door de user-input. Nadat dit gedaan is kijkt het script of het bestand eindwerk.tex wel bestaat, zo niet volgt een foutmelding. Omdat we het origineel niet willen overschrijven maken we een kopie genaamd eindwerkTemp.tex. Met een reguliere expressie \index{Reguliere expressie} zoekt het script in het .tex bestand naar de woorden \textit{author{Robin Daniels}} en vervangt de naam door de voor- en achternaam die zonet zijn ingegeven.

Het tweede gedeelte van het script zorgt voor de conversie van .tex naar .pdf met de nodige tussenstappen. Hierna worden de tijdelijke bestanden verwijderd. De output noemt eindwerkTemp.pdf, deze hernoemt het script naar de voornaamachternaam.pdf zonder spaties. De spaties worden weggewerkt door opnieuw gebruik te maken van een reguliere expressie.

Tenslotte gebruiken ik het \textit{mutt} commando wat ik in het vorige hoofdstuk heb ge\"installeerd en geconfigureerd. In de body plaats ik de aanspreking samen met de voornaam en een melding dat het gevraagde bestand in de bijlage zit. Als bijlage voeg ik het zonet aangemaakte pdf-bestand toe. De e-mail wordt verzonden naar het adres dat in het begin van het script is ingegeven. Het script sluit af met het verwijderen van de aangemaakte pdf-file. Zo blijven er geen hoop bestanden achter wanneer het script meerdere malen wordt gebruikt.

% Sourcecode pagina
\newpage
Sourcecode van het bestand mailreviewer.sh

\begin{code}
#!/bin/bash

# Inlezen van parameters
read -p "Aanspreking: " title
read -p "Voornaam: " firstn
read -p "Achternaam: " lastn
read -p "E-mail adres: " email

# Bestaat het bestand?
if [ -f eindwerk.tex ]
then

# Kopie nemen om het origineel niet te overschrijven
cp eindwerk.tex eindwerkTemp.tex

# Vervangen van de author + lfoot door de ingegeven parameters
sed -i "s/author{Robin Daniels}/author{$firstn $lastn}/" eindwerk.tex
sed -i "s/lfoot{Robin Daniels}/lfoot{$firstn $lastn}/" eindwerk.tex

# Conversie (2x naar LaTeX voor de zekerheid)
latex eindwerk.tex
latex eindwerk.tex
dvips eindwerk.dvi -o eindwerk.ps
ps2pdf eindwerk.ps

# Hernoemen naar de voor- en achternaam van de gebruiker (zonder spaties)
mv eindwerk.pdf ${firstn//[[:space:]]}${lastn//[[:space:]]}.pdf

# Mail versturen met de pdf als bijlage
echo "Beste $title $lastn, in de bijlage vindt u het gevraagde bestand." |
   mutt -s "Pdf-bestand" -a "${firstn//[[:space:]]}${lastn//[[:space:]]}.pdf" -- $email

# Verwijderen van de .pdf en .tex die bewerkt zijn en terugzetten van de originele .tex
rm ${firstn//[[:space:]]}${lastn//[[:space:]]}.pdf
rm eindwerk.tex
cp eindwerkTemp.tex eindwerk.tex
rm eindwerkTemp.tex

# Scherm leegmaken en melden dat het script voltooid is
clear
echo "Het script is succesvol uitgevoerd!"

# Als het bestand niet bestaat, scherm leegmaken en foutmelding geven
else
clear
echo Het bestand eindwerk.tex kan niet gevonden worden!
fi
\end{code}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Referenties
\newpage
\bibliographystyle{ieeetr}
\bibliography{eindwerk}

% Index pagina
\newpage
\printindex

% Einde document
\end{document}

